Browse Source

tags/2021-05-28
jules 17 years ago
parent
commit
654738e29c
14 changed files with 167 additions and 101 deletions
  1. +20
    -20
      build/macosx/platform_specific_code/juce_mac_AudioCDBurner.mm
  2. +7
    -7
      build/macosx/platform_specific_code/juce_mac_FileChooser.mm
  3. +1
    -1
      build/macosx/platform_specific_code/juce_mac_NativeHeaders.h
  4. +6
    -6
      build/macosx/platform_specific_code/juce_mac_WebBrowserComponent.mm
  5. +1
    -0
      build/win32/platform_specific_code/juce_win32_SystemStats.cpp
  6. +8
    -8
      extras/audio plugins/wrapper/formats/RTAS/juce_RTASWrapper.cpp
  7. +4
    -4
      extras/audio plugins/wrapper/formats/Standalone/juce_StandaloneFilterWindow.cpp
  8. +6
    -6
      extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp
  9. +56
    -33
      juce_amalgamated.cpp
  10. +21
    -8
      juce_amalgamated.h
  11. +8
    -8
      src/juce_core/basics/juce_Memory.h
  12. +2
    -0
      src/juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp
  13. +18
    -0
      src/juce_core/threads/juce_ReadWriteLock.cpp
  14. +9
    -0
      src/juce_core/threads/juce_ReadWriteLock.h

+ 20
- 20
build/macosx/platform_specific_code/juce_mac_AudioCDBurner.mm View File

@@ -55,20 +55,20 @@ END_JUCE_NAMESPACE
- (void) dealloc; - (void) dealloc;
- (bool) isDiskPresent; - (bool) isDiskPresent;
- (int) getNumAvailableAudioBlocks; - (int) getNumAvailableAudioBlocks;
- (void) addSourceTrack: (juce::AudioSource*) source numSamples: (int) numSamples_;
- (void) burn: (juce::AudioCDBurner::BurnProgressListener*) listener errorString: (juce::String*) error
- (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) numSamples_;
- (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error
ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting; ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting;
@end @end


//============================================================================== //==============================================================================
@interface AudioTrackProducer : NSObject @interface AudioTrackProducer : NSObject
{ {
juce::AudioSource* source;
JUCE_NAMESPACE::AudioSource* source;
int readPosition, lengthInFrames; int readPosition, lengthInFrames;
} }


- (AudioTrackProducer*) init: (int) lengthInFrames; - (AudioTrackProducer*) init: (int) lengthInFrames;
- (AudioTrackProducer*) initWithAudioSource: (juce::AudioSource*) source numSamples: (int) lengthInSamples;
- (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) lengthInSamples;
- (void) dealloc; - (void) dealloc;
- (void) setupTrackProperties: (DRTrack*) track; - (void) setupTrackProperties: (DRTrack*) track;


@@ -125,7 +125,7 @@ END_JUCE_NAMESPACE
objectForKey: DRDeviceMediaBlocksFreeKey] intValue]; objectForKey: DRDeviceMediaBlocksFreeKey] intValue];
} }


- (void) addSourceTrack: (juce::AudioSource*) source_ numSamples: (int) numSamples_
- (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) numSamples_
{ {
AudioTrackProducer* p = [[AudioTrackProducer alloc] initWithAudioSource: source_ numSamples: numSamples_]; AudioTrackProducer* p = [[AudioTrackProducer alloc] initWithAudioSource: source_ numSamples: numSamples_];
DRTrack* t = [[DRTrack alloc] initWithProducer: p]; DRTrack* t = [[DRTrack alloc] initWithProducer: p];
@@ -137,7 +137,7 @@ END_JUCE_NAMESPACE
[p release]; [p release];
} }


- (void) burn: (juce::AudioCDBurner::BurnProgressListener*) listener errorString: (juce::String*) error
- (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error
ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting
{ {
DRBurn* burn = [DRBurn burnForDevice: device]; DRBurn* burn = [DRBurn burnForDevice: device];
@@ -162,7 +162,7 @@ END_JUCE_NAMESPACE


for (;;) for (;;)
{ {
juce::Thread::sleep (300);
JUCE_NAMESPACE::Thread::sleep (300);
float progress = [[[burn status] objectForKey: DRStatusPercentCompleteKey] floatValue]; float progress = [[[burn status] objectForKey: DRStatusPercentCompleteKey] floatValue];


NSLog ([[burn status] description]); NSLog ([[burn status] description]);
@@ -189,7 +189,7 @@ NSLog ([[burn status] description]);


if ([err length] > 0) if ([err length] > 0)
{ {
*error = juce::String::fromUTF8 ((juce::uint8*) [err UTF8String]);
*error = JUCE_NAMESPACE::String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [err UTF8String]);
break; break;
} }
} }
@@ -224,7 +224,7 @@ NSLog ([[burn status] description]);
[p release]; [p release];
} }


- (AudioTrackProducer*) initWithAudioSource: (juce::AudioSource*) source_ numSamples: (int) lengthInSamples
- (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) lengthInSamples
{ {
AudioTrackProducer* s = [self init: (lengthInSamples + 587) / 588]; AudioTrackProducer* s = [self init: (lengthInSamples + 587) / 588];


@@ -283,23 +283,23 @@ NSLog ([[burn status] description]);
{ {
if (source != 0) if (source != 0)
{ {
const int numSamples = juce::jmin (bufferLength / 4, (lengthInFrames * (44100 / 75)) - readPosition);
const int numSamples = JUCE_NAMESPACE::jmin (bufferLength / 4, (lengthInFrames * (44100 / 75)) - readPosition);


if (numSamples > 0) if (numSamples > 0)
{ {
juce::AudioSampleBuffer tempBuffer (2, numSamples);
JUCE_NAMESPACE::AudioSampleBuffer tempBuffer (2, numSamples);


juce::AudioSourceChannelInfo info;
JUCE_NAMESPACE::AudioSourceChannelInfo info;
info.buffer = &tempBuffer; info.buffer = &tempBuffer;
info.startSample = 0; info.startSample = 0;
info.numSamples = numSamples; info.numSamples = numSamples;


source->getNextAudioBlock (info); source->getNextAudioBlock (info);


juce::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (0),
buffer, numSamples, 4);
juce::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (1),
buffer + 2, numSamples, 4);
JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (0),
buffer, numSamples, 4);
JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (1),
buffer + 2, numSamples, 4);


readPosition += numSamples; readPosition += numSamples;
} }
@@ -389,7 +389,7 @@ const StringArray AudioCDBurner::findAvailableDevices()
StringArray s; StringArray s;


for (int i = 0; i < [names count]; ++i) for (int i = 0; i < [names count]; ++i)
s.add (String::fromUTF8 ((juce::uint8*) [[names objectAtIndex: i] UTF8String]));
s.add (String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [[names objectAtIndex: i] UTF8String]));


return s; return s;
} }
@@ -422,18 +422,18 @@ bool AudioCDBurner::addAudioTrack (AudioSource* source, int numSamps)
return false; return false;
} }


const String AudioCDBurner::burn (juce::AudioCDBurner::BurnProgressListener* listener,
const String AudioCDBurner::burn (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener* listener,
const bool ejectDiscAfterwards, const bool ejectDiscAfterwards,
const bool peformFakeBurnForTesting) const bool peformFakeBurnForTesting)
{ {
const AutoPool pool; const AutoPool pool;
juce::String error ("Couldn't open or write to the CD device");
JUCE_NAMESPACE::String error ("Couldn't open or write to the CD device");


OpenDiskDevice* dev = (OpenDiskDevice*) internal; OpenDiskDevice* dev = (OpenDiskDevice*) internal;


if (dev != 0) if (dev != 0)
{ {
error = juce::String::empty;
error = JUCE_NAMESPACE::String::empty;
[dev burn: listener [dev burn: listener
errorString: &error errorString: &error
ejectAfterwards: ejectDiscAfterwards ejectAfterwards: ejectDiscAfterwards


+ 7
- 7
build/macosx/platform_specific_code/juce_mac_FileChooser.mm View File

@@ -36,12 +36,12 @@ BEGIN_JUCE_NAMESPACE
#include "../../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h" #include "../../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h"
END_JUCE_NAMESPACE END_JUCE_NAMESPACE


static const juce::String nsStringToJuce (NSString* s)
static const JUCE_NAMESPACE::String nsStringToJuce (NSString* s)
{ {
return juce::String::fromUTF8 ((juce::uint8*) [s UTF8String]);
return JUCE_NAMESPACE::String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [s UTF8String]);
} }


static NSString* juceStringToNS (const juce::String& s)
static NSString* juceStringToNS (const JUCE_NAMESPACE::String& s)
{ {
return [NSString stringWithUTF8String: (const char*) s.toUTF8()]; return [NSString stringWithUTF8String: (const char*) s.toUTF8()];
} }
@@ -49,17 +49,17 @@ static NSString* juceStringToNS (const juce::String& s)
//============================================================================== //==============================================================================
@interface JuceFileChooserDelegate : NSObject @interface JuceFileChooserDelegate : NSObject
{ {
juce::StringArray* filters;
JUCE_NAMESPACE::StringArray* filters;
} }


- (JuceFileChooserDelegate*) initWithFilters: (juce::StringArray*) filters_;
- (JuceFileChooserDelegate*) initWithFilters: (JUCE_NAMESPACE::StringArray*) filters_;
- (void) dealloc; - (void) dealloc;
- (BOOL) panel:(id) sender shouldShowFilename: (NSString*) filename; - (BOOL) panel:(id) sender shouldShowFilename: (NSString*) filename;


@end @end


@implementation JuceFileChooserDelegate @implementation JuceFileChooserDelegate
- (JuceFileChooserDelegate*) initWithFilters: (juce::StringArray*) filters_
- (JuceFileChooserDelegate*) initWithFilters: (JUCE_NAMESPACE::StringArray*) filters_
{ {
[super init]; [super init];
filters = filters_; filters = filters_;
@@ -78,7 +78,7 @@ static NSString* juceStringToNS (const juce::String& s)


for (int i = filters->size(); --i >= 0;) for (int i = filters->size(); --i >= 0;)
{ {
const juce::String wildcard ((*filters)[i].toLowerCase());
const JUCE_NAMESPACE::String wildcard ((*filters)[i].toLowerCase());


if (fnmatch (wildcard.toUTF8(), filenameUTF8, 0) == 0) if (fnmatch (wildcard.toUTF8(), filenameUTF8, 0) == 0)
return true; return true;


+ 1
- 1
build/macosx/platform_specific_code/juce_mac_NativeHeaders.h View File

@@ -29,7 +29,7 @@
============================================================================== ==============================================================================
*/ */
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
#include "../../../src/juce_core/basics/juce_StandardHeader. h"
#include <Cocoa/Cocoa.h> #include <Cocoa/Cocoa.h>


+ 6
- 6
build/macosx/platform_specific_code/juce_mac_WebBrowserComponent.mm View File

@@ -45,10 +45,10 @@ END_JUCE_NAMESPACE
//============================================================================== //==============================================================================
@interface DownloadClickDetector : NSObject @interface DownloadClickDetector : NSObject
{ {
juce::WebBrowserComponent* ownerComponent;
JUCE_NAMESPACE::WebBrowserComponent* ownerComponent;
} }


- (DownloadClickDetector*) initWithOwner: (juce::WebBrowserComponent*) ownerComponent;
- (DownloadClickDetector*) initWithOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent;


- (void) webView: (WebView*) webView decidePolicyForNavigationAction: (NSDictionary*) actionInformation - (void) webView: (WebView*) webView decidePolicyForNavigationAction: (NSDictionary*) actionInformation
request: (NSURLRequest*) request request: (NSURLRequest*) request
@@ -59,7 +59,7 @@ END_JUCE_NAMESPACE
//============================================================================== //==============================================================================
@implementation DownloadClickDetector @implementation DownloadClickDetector


- (DownloadClickDetector*) initWithOwner: (juce::WebBrowserComponent*) ownerComponent_
- (DownloadClickDetector*) initWithOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent_
{ {
[super init]; [super init];
ownerComponent = ownerComponent_; ownerComponent = ownerComponent_;
@@ -70,7 +70,7 @@ END_JUCE_NAMESPACE
{ {
NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"]; NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"];


if (ownerComponent->pageAboutToLoad (juce::String::fromUTF8 ((const juce::uint8*) [[url absoluteString] UTF8String])))
if (ownerComponent->pageAboutToLoad (JUCE_NAMESPACE::String::fromUTF8 ((const JUCE_NAMESPACE::uint8*) [[url absoluteString] UTF8String])))
[listener use]; [listener use];
else else
[listener ignore]; [listener ignore];
@@ -190,11 +190,11 @@ public:
{ {
const String headerName ((*headers)[i].upToFirstOccurrenceOf (T(":"), false, false).trim()); const String headerName ((*headers)[i].upToFirstOccurrenceOf (T(":"), false, false).trim());
headerNamesAsChars[i] = (char*) juce_calloc (headerName.copyToUTF8 (0)); headerNamesAsChars[i] = (char*) juce_calloc (headerName.copyToUTF8 (0));
headerName.copyToUTF8 ((juce::uint8*) headerNamesAsChars[i]);
headerName.copyToUTF8 ((JUCE_NAMESPACE::uint8*) headerNamesAsChars[i]);


const String headerValue ((*headers)[i].fromFirstOccurrenceOf (T(":"), false, false).trim()); const String headerValue ((*headers)[i].fromFirstOccurrenceOf (T(":"), false, false).trim());
headerValuesAsChars[i] = (char*) juce_calloc (headerValue.copyToUTF8 (0)); headerValuesAsChars[i] = (char*) juce_calloc (headerValue.copyToUTF8 (0));
headerValue.copyToUTF8 ((juce::uint8*) headerValuesAsChars[i]);
headerValue.copyToUTF8 ((JUCE_NAMESPACE::uint8*) headerValuesAsChars[i]);
} }
} }




+ 1
- 0
build/win32/platform_specific_code/juce_win32_SystemStats.cpp View File

@@ -341,6 +341,7 @@ bool SystemStats::isOperatingSystem64Bit() throw()
#endif #endif
} }
//============================================================================== //==============================================================================
int SystemStats::getMemorySizeInMegabytes() throw() int SystemStats::getMemorySizeInMegabytes() throw()
{ {


+ 8
- 8
extras/audio plugins/wrapper/formats/RTAS/juce_RTASWrapper.cpp View File

@@ -107,8 +107,8 @@
//============================================================================== //==============================================================================
#if JUCE_WIN32 #if JUCE_WIN32
extern void JUCE_CALLTYPE attachSubWindow (void* hostWindow, int& titleW, int& titleH, juce::Component* comp);
extern void JUCE_CALLTYPE resizeHostWindow (void* hostWindow, int& titleW, int& titleH, juce::Component* comp);
extern void JUCE_CALLTYPE attachSubWindow (void* hostWindow, int& titleW, int& titleH, JUCE_NAMESPACE::Component* comp);
extern void JUCE_CALLTYPE resizeHostWindow (void* hostWindow, int& titleW, int& titleH, JUCE_NAMESPACE::Component* comp);
#if ! JucePlugin_EditorRequiresKeyboardFocus #if ! JucePlugin_EditorRequiresKeyboardFocus
extern void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow); extern void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow);
#endif #endif
@@ -295,7 +295,7 @@ public:
private: private:
AudioProcessor* const filter; AudioProcessor* const filter;
JucePlugInProcess* const process; JucePlugInProcess* const process;
juce::Component* wrapper;
JUCE_NAMESPACE::Component* wrapper;
AudioProcessorEditor* editorComp; AudioProcessorEditor* editorComp;
void deleteEditorComp() void deleteEditorComp()
@@ -304,7 +304,7 @@ public:
{ {
PopupMenu::dismissAllActiveMenus(); PopupMenu::dismissAllActiveMenus();
juce::Component* const modalComponent = juce::Component::getCurrentlyModalComponent();
JUCE_NAMESPACE::Component* const modalComponent = JUCE_NAMESPACE::Component::getCurrentlyModalComponent();
if (modalComponent != 0) if (modalComponent != 0)
modalComponent->exitModalState (0); modalComponent->exitModalState (0);
@@ -317,7 +317,7 @@ public:
//============================================================================== //==============================================================================
// A component to hold the AudioProcessorEditor, and cope with some housekeeping // A component to hold the AudioProcessorEditor, and cope with some housekeeping
// chores when it changes or repaints. // chores when it changes or repaints.
class EditorCompWrapper : public juce::Component,
class EditorCompWrapper : public JUCE_NAMESPACE::Component,
#if JUCE_MAC #if JUCE_MAC
public Timer public Timer
#else #else
@@ -435,7 +435,7 @@ public:
void resized() void resized()
{ {
juce::Component* const c = getChildComponent (0);
JUCE_NAMESPACE::Component* const c = getChildComponent (0);
if (c != 0) if (c != 0)
c->setBounds (0, 0, getWidth(), getHeight()); c->setBounds (0, 0, getWidth(), getHeight());
@@ -476,7 +476,7 @@ public:
#endif #endif
#if JUCE_WIN32 #if JUCE_WIN32
void globalFocusChanged (juce::Component*)
void globalFocusChanged (JUCE_NAMESPACE::Component*)
{ {
#if ! JucePlugin_EditorRequiresKeyboardFocus #if ! JucePlugin_EditorRequiresKeyboardFocus
if (hasKeyboardFocus (true)) if (hasKeyboardFocus (true))
@@ -485,7 +485,7 @@ public:
} }
#endif #endif
void childBoundsChanged (juce::Component* child)
void childBoundsChanged (JUCE_NAMESPACE::Component* child)
{ {
setSize (child->getWidth(), child->getHeight()); setSize (child->getWidth(), child->getHeight());
child->setTopLeftPosition (0, 0); child->setTopLeftPosition (0, 0);


+ 4
- 4
extras/audio plugins/wrapper/formats/Standalone/juce_StandaloneFilterWindow.cpp View File

@@ -81,7 +81,7 @@ StandaloneFilterWindow::StandaloneFilterWindow (const String& title,
if (globalSettings != 0) if (globalSettings != 0)
{ {
juce::MemoryBlock data;
JUCE_NAMESPACE::MemoryBlock data;
if (data.fromBase64Encoding (globalSettings->getValue (T("filterState"))) if (data.fromBase64Encoding (globalSettings->getValue (T("filterState")))
&& data.getSize() > 0) && data.getSize() > 0)
@@ -130,7 +130,7 @@ StandaloneFilterWindow::~StandaloneFilterWindow()
if (globalSettings != 0 && filter != 0) if (globalSettings != 0 && filter != 0)
{ {
juce::MemoryBlock data;
JUCE_NAMESPACE::MemoryBlock data;
filter->getStateInformation (data); filter->getStateInformation (data);
globalSettings->setValue (T("filterState"), data.toBase64Encoding()); globalSettings->setValue (T("filterState"), data.toBase64Encoding());
@@ -185,7 +185,7 @@ void StandaloneFilterWindow::saveState()
if (fc.browseForFileToSave (true)) if (fc.browseForFileToSave (true))
{ {
juce::MemoryBlock data;
JUCE_NAMESPACE::MemoryBlock data;
filter->getStateInformation (data); filter->getStateInformation (data);
if (! fc.getResult().replaceWithData (data.getData(), data.getSize())) if (! fc.getResult().replaceWithData (data.getData(), data.getSize()))
@@ -207,7 +207,7 @@ void StandaloneFilterWindow::loadState()
if (fc.browseForFileToOpen()) if (fc.browseForFileToOpen())
{ {
juce::MemoryBlock data;
JUCE_NAMESPACE::MemoryBlock data;
if (fc.getResult().loadFileAsData (data)) if (fc.getResult().loadFileAsData (data))
{ {


+ 6
- 6
extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp View File

@@ -129,7 +129,7 @@
class JuceVSTWrapper; class JuceVSTWrapper;
static bool recursionCheck = false; static bool recursionCheck = false;
static juce::uint32 lastMasterIdleCall = 0;
static JUCE_NAMESPACE::uint32 lastMasterIdleCall = 0;
BEGIN_JUCE_NAMESPACE BEGIN_JUCE_NAMESPACE
extern void juce_callAnyTimersSynchronously(); extern void juce_callAnyTimersSynchronously();
@@ -564,7 +564,7 @@ public:
{ {
const VstMidiEvent* const vme = (const VstMidiEvent*) e; const VstMidiEvent* const vme = (const VstMidiEvent*) e;
midiEvents.addEvent ((const juce::uint8*) vme->midiData,
midiEvents.addEvent ((const JUCE_NAMESPACE::uint8*) vme->midiData,
4, 4,
vme->deltaFrames); vme->deltaFrames);
} }
@@ -692,7 +692,7 @@ public:
ensureOutgoingEventSize (numEvents); ensureOutgoingEventSize (numEvents);
outgoingEvents->numEvents = 0; outgoingEvents->numEvents = 0;
const juce::uint8* midiEventData;
const JUCE_NAMESPACE::uint8* midiEventData;
int midiEventSize, midiEventPosition; int midiEventSize, midiEventPosition;
MidiBuffer::Iterator i (midiEvents); MidiBuffer::Iterator i (midiEvents);
@@ -1072,7 +1072,7 @@ public:
if (Component::isMouseButtonDownAnywhere() if (Component::isMouseButtonDownAnywhere()
&& ! recursionCheck) && ! recursionCheck)
{ {
const juce::uint32 now = JUCE_NAMESPACE::Time::getMillisecondCounter();
const JUCE_NAMESPACE::uint32 now = JUCE_NAMESPACE::Time::getMillisecondCounter();
if (now > lastMasterIdleCall + 20 && editorComp != 0) if (now > lastMasterIdleCall + 20 && editorComp != 0)
{ {
@@ -1378,8 +1378,8 @@ public:
private: private:
AudioProcessor* filter; AudioProcessor* filter;
juce::MemoryBlock chunkMemory;
juce::uint32 chunkMemoryTime;
JUCE_NAMESPACE::MemoryBlock chunkMemory;
JUCE_NAMESPACE::uint32 chunkMemoryTime;
EditorCompWrapper* editorComp; EditorCompWrapper* editorComp;
ERect editorSize; ERect editorSize;
MidiBuffer midiEvents; MidiBuffer midiEvents;


+ 56
- 33
juce_amalgamated.cpp View File

@@ -13834,6 +13834,24 @@ void ReadWriteLock::enterWrite() const throw()
} }
} }


bool ReadWriteLock::tryEnterWrite() const throw()
{
const int threadId = Thread::getCurrentThreadId();
const ScopedLock sl (accessLock);

if (readerThreads.size() + numWriters == 0
|| threadId == writerThreadId
|| (readerThreads.size() == 2
&& readerThreads.getUnchecked(0) == threadId))
{
writerThreadId = threadId;
++numWriters;
return true;
}

return false;
}

void ReadWriteLock::exitWrite() const throw() void ReadWriteLock::exitWrite() const throw()
{ {
const ScopedLock sl (accessLock); const ScopedLock sl (accessLock);
@@ -97849,6 +97867,8 @@ void zcfree (voidpf opaque, voidpf ptr)
#endif /* MY_ZCALLOC */ #endif /* MY_ZCALLOC */
/********* End of inlined file: zutil.c *********/ /********* End of inlined file: zutil.c *********/


#undef Byte
#undef Bytef
} }
} }


@@ -253097,6 +253117,7 @@ END_JUCE_NAMESPACE
/********* Start of inlined file: juce_mac_Network.mm *********/ /********* Start of inlined file: juce_mac_Network.mm *********/


/********* Start of inlined file: juce_mac_NativeHeaders.h *********/ /********* Start of inlined file: juce_mac_NativeHeaders.h *********/
#include "../../../src/juce_core/basics/juce_StandardHeader. h"


#include <Cocoa/Cocoa.h> #include <Cocoa/Cocoa.h>


@@ -253627,6 +253648,7 @@ END_JUCE_NAMESPACE
/********* Start of inlined file: juce_mac_AudioCDBurner.mm *********/ /********* Start of inlined file: juce_mac_AudioCDBurner.mm *********/


/********* Start of inlined file: juce_mac_NativeHeaders.h *********/ /********* Start of inlined file: juce_mac_NativeHeaders.h *********/
#include "../../../src/juce_core/basics/juce_StandardHeader. h"


#include <Cocoa/Cocoa.h> #include <Cocoa/Cocoa.h>


@@ -253664,19 +253686,19 @@ END_JUCE_NAMESPACE
- (void) dealloc; - (void) dealloc;
- (bool) isDiskPresent; - (bool) isDiskPresent;
- (int) getNumAvailableAudioBlocks; - (int) getNumAvailableAudioBlocks;
- (void) addSourceTrack: (juce::AudioSource*) source numSamples: (int) numSamples_;
- (void) burn: (juce::AudioCDBurner::BurnProgressListener*) listener errorString: (juce::String*) error
- (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) numSamples_;
- (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error
ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting; ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting;
@end @end


@interface AudioTrackProducer : NSObject @interface AudioTrackProducer : NSObject
{ {
juce::AudioSource* source;
JUCE_NAMESPACE::AudioSource* source;
int readPosition, lengthInFrames; int readPosition, lengthInFrames;
} }


- (AudioTrackProducer*) init: (int) lengthInFrames; - (AudioTrackProducer*) init: (int) lengthInFrames;
- (AudioTrackProducer*) initWithAudioSource: (juce::AudioSource*) source numSamples: (int) lengthInSamples;
- (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) lengthInSamples;
- (void) dealloc; - (void) dealloc;
- (void) setupTrackProperties: (DRTrack*) track; - (void) setupTrackProperties: (DRTrack*) track;


@@ -253732,7 +253754,7 @@ END_JUCE_NAMESPACE
objectForKey: DRDeviceMediaBlocksFreeKey] intValue]; objectForKey: DRDeviceMediaBlocksFreeKey] intValue];
} }


- (void) addSourceTrack: (juce::AudioSource*) source_ numSamples: (int) numSamples_
- (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) numSamples_
{ {
AudioTrackProducer* p = [[AudioTrackProducer alloc] initWithAudioSource: source_ numSamples: numSamples_]; AudioTrackProducer* p = [[AudioTrackProducer alloc] initWithAudioSource: source_ numSamples: numSamples_];
DRTrack* t = [[DRTrack alloc] initWithProducer: p]; DRTrack* t = [[DRTrack alloc] initWithProducer: p];
@@ -253744,7 +253766,7 @@ END_JUCE_NAMESPACE
[p release]; [p release];
} }


- (void) burn: (juce::AudioCDBurner::BurnProgressListener*) listener errorString: (juce::String*) error
- (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error
ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting
{ {
DRBurn* burn = [DRBurn burnForDevice: device]; DRBurn* burn = [DRBurn burnForDevice: device];
@@ -253769,7 +253791,7 @@ END_JUCE_NAMESPACE


for (;;) for (;;)
{ {
juce::Thread::sleep (300);
JUCE_NAMESPACE::Thread::sleep (300);
float progress = [[[burn status] objectForKey: DRStatusPercentCompleteKey] floatValue]; float progress = [[[burn status] objectForKey: DRStatusPercentCompleteKey] floatValue];


NSLog ([[burn status] description]); NSLog ([[burn status] description]);
@@ -253796,7 +253818,7 @@ NSLog ([[burn status] description]);


if ([err length] > 0) if ([err length] > 0)
{ {
*error = juce::String::fromUTF8 ((juce::uint8*) [err UTF8String]);
*error = JUCE_NAMESPACE::String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [err UTF8String]);
break; break;
} }
} }
@@ -253829,7 +253851,7 @@ NSLog ([[burn status] description]);
[p release]; [p release];
} }


- (AudioTrackProducer*) initWithAudioSource: (juce::AudioSource*) source_ numSamples: (int) lengthInSamples
- (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) lengthInSamples
{ {
AudioTrackProducer* s = [self init: (lengthInSamples + 587) / 588]; AudioTrackProducer* s = [self init: (lengthInSamples + 587) / 588];


@@ -253888,23 +253910,23 @@ NSLog ([[burn status] description]);
{ {
if (source != 0) if (source != 0)
{ {
const int numSamples = juce::jmin (bufferLength / 4, (lengthInFrames * (44100 / 75)) - readPosition);
const int numSamples = JUCE_NAMESPACE::jmin (bufferLength / 4, (lengthInFrames * (44100 / 75)) - readPosition);


if (numSamples > 0) if (numSamples > 0)
{ {
juce::AudioSampleBuffer tempBuffer (2, numSamples);
JUCE_NAMESPACE::AudioSampleBuffer tempBuffer (2, numSamples);


juce::AudioSourceChannelInfo info;
JUCE_NAMESPACE::AudioSourceChannelInfo info;
info.buffer = &tempBuffer; info.buffer = &tempBuffer;
info.startSample = 0; info.startSample = 0;
info.numSamples = numSamples; info.numSamples = numSamples;


source->getNextAudioBlock (info); source->getNextAudioBlock (info);


juce::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (0),
buffer, numSamples, 4);
juce::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (1),
buffer + 2, numSamples, 4);
JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (0),
buffer, numSamples, 4);
JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (1),
buffer + 2, numSamples, 4);


readPosition += numSamples; readPosition += numSamples;
} }
@@ -253992,7 +254014,7 @@ const StringArray AudioCDBurner::findAvailableDevices()
StringArray s; StringArray s;


for (int i = 0; i < [names count]; ++i) for (int i = 0; i < [names count]; ++i)
s.add (String::fromUTF8 ((juce::uint8*) [[names objectAtIndex: i] UTF8String]));
s.add (String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [[names objectAtIndex: i] UTF8String]));


return s; return s;
} }
@@ -254025,18 +254047,18 @@ bool AudioCDBurner::addAudioTrack (AudioSource* source, int numSamps)
return false; return false;
} }


const String AudioCDBurner::burn (juce::AudioCDBurner::BurnProgressListener* listener,
const String AudioCDBurner::burn (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener* listener,
const bool ejectDiscAfterwards, const bool ejectDiscAfterwards,
const bool peformFakeBurnForTesting) const bool peformFakeBurnForTesting)
{ {
const AutoPool pool; const AutoPool pool;
juce::String error ("Couldn't open or write to the CD device");
JUCE_NAMESPACE::String error ("Couldn't open or write to the CD device");


OpenDiskDevice* dev = (OpenDiskDevice*) internal; OpenDiskDevice* dev = (OpenDiskDevice*) internal;


if (dev != 0) if (dev != 0)
{ {
error = juce::String::empty;
error = JUCE_NAMESPACE::String::empty;
[dev burn: listener [dev burn: listener
errorString: &error errorString: &error
ejectAfterwards: ejectDiscAfterwards ejectAfterwards: ejectDiscAfterwards
@@ -255837,6 +255859,7 @@ END_JUCE_NAMESPACE
/********* Start of inlined file: juce_mac_FileChooser.mm *********/ /********* Start of inlined file: juce_mac_FileChooser.mm *********/


/********* Start of inlined file: juce_mac_NativeHeaders.h *********/ /********* Start of inlined file: juce_mac_NativeHeaders.h *********/
#include "../../../src/juce_core/basics/juce_StandardHeader. h"


#include <Cocoa/Cocoa.h> #include <Cocoa/Cocoa.h>


@@ -255861,29 +255884,29 @@ BEGIN_JUCE_NAMESPACE


END_JUCE_NAMESPACE END_JUCE_NAMESPACE


static const juce::String nsStringToJuce (NSString* s)
static const JUCE_NAMESPACE::String nsStringToJuce (NSString* s)
{ {
return juce::String::fromUTF8 ((juce::uint8*) [s UTF8String]);
return JUCE_NAMESPACE::String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [s UTF8String]);
} }


static NSString* juceStringToNS (const juce::String& s)
static NSString* juceStringToNS (const JUCE_NAMESPACE::String& s)
{ {
return [NSString stringWithUTF8String: (const char*) s.toUTF8()]; return [NSString stringWithUTF8String: (const char*) s.toUTF8()];
} }


@interface JuceFileChooserDelegate : NSObject @interface JuceFileChooserDelegate : NSObject
{ {
juce::StringArray* filters;
JUCE_NAMESPACE::StringArray* filters;
} }


- (JuceFileChooserDelegate*) initWithFilters: (juce::StringArray*) filters_;
- (JuceFileChooserDelegate*) initWithFilters: (JUCE_NAMESPACE::StringArray*) filters_;
- (void) dealloc; - (void) dealloc;
- (BOOL) panel:(id) sender shouldShowFilename: (NSString*) filename; - (BOOL) panel:(id) sender shouldShowFilename: (NSString*) filename;


@end @end


@implementation JuceFileChooserDelegate @implementation JuceFileChooserDelegate
- (JuceFileChooserDelegate*) initWithFilters: (juce::StringArray*) filters_
- (JuceFileChooserDelegate*) initWithFilters: (JUCE_NAMESPACE::StringArray*) filters_
{ {
[super init]; [super init];
filters = filters_; filters = filters_;
@@ -255902,7 +255925,7 @@ static NSString* juceStringToNS (const juce::String& s)


for (int i = filters->size(); --i >= 0;) for (int i = filters->size(); --i >= 0;)
{ {
const juce::String wildcard ((*filters)[i].toLowerCase());
const JUCE_NAMESPACE::String wildcard ((*filters)[i].toLowerCase());


if (fnmatch (wildcard.toUTF8(), filenameUTF8, 0) == 0) if (fnmatch (wildcard.toUTF8(), filenameUTF8, 0) == 0)
return true; return true;
@@ -256796,10 +256819,10 @@ END_JUCE_NAMESPACE


@interface DownloadClickDetector : NSObject @interface DownloadClickDetector : NSObject
{ {
juce::WebBrowserComponent* ownerComponent;
JUCE_NAMESPACE::WebBrowserComponent* ownerComponent;
} }


- (DownloadClickDetector*) initWithOwner: (juce::WebBrowserComponent*) ownerComponent;
- (DownloadClickDetector*) initWithOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent;


- (void) webView: (WebView*) webView decidePolicyForNavigationAction: (NSDictionary*) actionInformation - (void) webView: (WebView*) webView decidePolicyForNavigationAction: (NSDictionary*) actionInformation
request: (NSURLRequest*) request request: (NSURLRequest*) request
@@ -256809,7 +256832,7 @@ END_JUCE_NAMESPACE


@implementation DownloadClickDetector @implementation DownloadClickDetector


- (DownloadClickDetector*) initWithOwner: (juce::WebBrowserComponent*) ownerComponent_
- (DownloadClickDetector*) initWithOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent_
{ {
[super init]; [super init];
ownerComponent = ownerComponent_; ownerComponent = ownerComponent_;
@@ -256820,7 +256843,7 @@ END_JUCE_NAMESPACE
{ {
NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"]; NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"];


if (ownerComponent->pageAboutToLoad (juce::String::fromUTF8 ((const juce::uint8*) [[url absoluteString] UTF8String])))
if (ownerComponent->pageAboutToLoad (JUCE_NAMESPACE::String::fromUTF8 ((const JUCE_NAMESPACE::uint8*) [[url absoluteString] UTF8String])))
[listener use]; [listener use];
else else
[listener ignore]; [listener ignore];
@@ -256939,11 +256962,11 @@ public:
{ {
const String headerName ((*headers)[i].upToFirstOccurrenceOf (T(":"), false, false).trim()); const String headerName ((*headers)[i].upToFirstOccurrenceOf (T(":"), false, false).trim());
headerNamesAsChars[i] = (char*) juce_calloc (headerName.copyToUTF8 (0)); headerNamesAsChars[i] = (char*) juce_calloc (headerName.copyToUTF8 (0));
headerName.copyToUTF8 ((juce::uint8*) headerNamesAsChars[i]);
headerName.copyToUTF8 ((JUCE_NAMESPACE::uint8*) headerNamesAsChars[i]);


const String headerValue ((*headers)[i].fromFirstOccurrenceOf (T(":"), false, false).trim()); const String headerValue ((*headers)[i].fromFirstOccurrenceOf (T(":"), false, false).trim());
headerValuesAsChars[i] = (char*) juce_calloc (headerValue.copyToUTF8 (0)); headerValuesAsChars[i] = (char*) juce_calloc (headerValue.copyToUTF8 (0));
headerValue.copyToUTF8 ((juce::uint8*) headerValuesAsChars[i]);
headerValue.copyToUTF8 ((JUCE_NAMESPACE::uint8*) headerValuesAsChars[i]);
} }
} }




+ 21
- 8
juce_amalgamated.h View File

@@ -674,13 +674,13 @@ extern bool JUCE_API JUCE_CALLTYPE juce_isRunningUnderDebugger() throw();
extern JUCE_API void juce_DebugFree (void* const block); extern JUCE_API void juce_DebugFree (void* const block);


/** This should be used instead of calling malloc directly. */ /** This should be used instead of calling malloc directly. */
#define juce_malloc(numBytes) juce::juce_DebugMalloc (numBytes, __FILE__, __LINE__)
#define juce_malloc(numBytes) JUCE_NAMESPACE::juce_DebugMalloc (numBytes, __FILE__, __LINE__)
/** This should be used instead of calling calloc directly. */ /** This should be used instead of calling calloc directly. */
#define juce_calloc(numBytes) juce::juce_DebugCalloc (numBytes, __FILE__, __LINE__)
#define juce_calloc(numBytes) JUCE_NAMESPACE::juce_DebugCalloc (numBytes, __FILE__, __LINE__)
/** This should be used instead of calling realloc directly. */ /** This should be used instead of calling realloc directly. */
#define juce_realloc(location, numBytes) juce::juce_DebugRealloc (location, numBytes, __FILE__, __LINE__)
#define juce_realloc(location, numBytes) JUCE_NAMESPACE::juce_DebugRealloc (location, numBytes, __FILE__, __LINE__)
/** This should be used instead of calling free directly. */ /** This should be used instead of calling free directly. */
#define juce_free(location) juce::juce_DebugFree (location)
#define juce_free(location) JUCE_NAMESPACE::juce_DebugFree (location)
#endif #endif


#if ! defined (_AFXDLL) #if ! defined (_AFXDLL)
@@ -706,13 +706,13 @@ extern bool JUCE_API JUCE_CALLTYPE juce_isRunningUnderDebugger() throw();
extern JUCE_API void juce_Free (void* const block); extern JUCE_API void juce_Free (void* const block);


/** This should be used instead of calling malloc directly. */ /** This should be used instead of calling malloc directly. */
#define juce_malloc(numBytes) juce::juce_Malloc (numBytes)
#define juce_malloc(numBytes) JUCE_NAMESPACE::juce_Malloc (numBytes)
/** This should be used instead of calling calloc directly. */ /** This should be used instead of calling calloc directly. */
#define juce_calloc(numBytes) juce::juce_Calloc (numBytes)
#define juce_calloc(numBytes) JUCE_NAMESPACE::juce_Calloc (numBytes)
/** This should be used instead of calling realloc directly. */ /** This should be used instead of calling realloc directly. */
#define juce_realloc(location, numBytes) juce::juce_Realloc (location, numBytes)
#define juce_realloc(location, numBytes) JUCE_NAMESPACE::juce_Realloc (location, numBytes)
/** This should be used instead of calling free directly. */ /** This should be used instead of calling free directly. */
#define juce_free(location) juce::juce_Free (location)
#define juce_free(location) JUCE_NAMESPACE::juce_Free (location)


#define juce_UseDebuggingNewOperator \ #define juce_UseDebuggingNewOperator \
static void* operator new (size_t sz) { void* const p = juce_malloc ((int) sz); return (p != 0) ? p : ::operator new (sz); } \ static void* operator new (size_t sz) { void* const p = juce_malloc ((int) sz); return (p != 0) ? p : ::operator new (sz); } \
@@ -7480,6 +7480,10 @@ public:
*/ */
static bool isOperatingSystem64Bit() throw(); static bool isOperatingSystem64Bit() throw();


/** Returns a country code based on the current locale of the OS.
*/
static const String getCountryCode();

// CPU and memory information.. // CPU and memory information..


/** Returns the approximate CPU speed. /** Returns the approximate CPU speed.
@@ -13922,6 +13926,15 @@ public:
*/ */
void enterWrite() const throw(); void enterWrite() const throw();


/** Tries to lock this object for writing.

This is like enterWrite(), but doesn't block - it returns true if it manages
to obtain the lock.

@see enterWrite
*/
bool tryEnterWrite() const throw();

/** Releases the write-lock. /** Releases the write-lock.


If the caller thread hasn't got the lock, this can have unpredictable results. If the caller thread hasn't got the lock, this can have unpredictable results.


+ 8
- 8
src/juce_core/basics/juce_Memory.h View File

@@ -64,13 +64,13 @@
extern JUCE_API void juce_DebugFree (void* const block); extern JUCE_API void juce_DebugFree (void* const block);
/** This should be used instead of calling malloc directly. */ /** This should be used instead of calling malloc directly. */
#define juce_malloc(numBytes) juce::juce_DebugMalloc (numBytes, __FILE__, __LINE__)
#define juce_malloc(numBytes) JUCE_NAMESPACE::juce_DebugMalloc (numBytes, __FILE__, __LINE__)
/** This should be used instead of calling calloc directly. */ /** This should be used instead of calling calloc directly. */
#define juce_calloc(numBytes) juce::juce_DebugCalloc (numBytes, __FILE__, __LINE__)
#define juce_calloc(numBytes) JUCE_NAMESPACE::juce_DebugCalloc (numBytes, __FILE__, __LINE__)
/** This should be used instead of calling realloc directly. */ /** This should be used instead of calling realloc directly. */
#define juce_realloc(location, numBytes) juce::juce_DebugRealloc (location, numBytes, __FILE__, __LINE__)
#define juce_realloc(location, numBytes) JUCE_NAMESPACE::juce_DebugRealloc (location, numBytes, __FILE__, __LINE__)
/** This should be used instead of calling free directly. */ /** This should be used instead of calling free directly. */
#define juce_free(location) juce::juce_DebugFree (location)
#define juce_free(location) JUCE_NAMESPACE::juce_DebugFree (location)
#endif #endif
#if ! defined (_AFXDLL) #if ! defined (_AFXDLL)
@@ -96,13 +96,13 @@
extern JUCE_API void juce_Free (void* const block); extern JUCE_API void juce_Free (void* const block);
/** This should be used instead of calling malloc directly. */ /** This should be used instead of calling malloc directly. */
#define juce_malloc(numBytes) juce::juce_Malloc (numBytes)
#define juce_malloc(numBytes) JUCE_NAMESPACE::juce_Malloc (numBytes)
/** This should be used instead of calling calloc directly. */ /** This should be used instead of calling calloc directly. */
#define juce_calloc(numBytes) juce::juce_Calloc (numBytes)
#define juce_calloc(numBytes) JUCE_NAMESPACE::juce_Calloc (numBytes)
/** This should be used instead of calling realloc directly. */ /** This should be used instead of calling realloc directly. */
#define juce_realloc(location, numBytes) juce::juce_Realloc (location, numBytes)
#define juce_realloc(location, numBytes) JUCE_NAMESPACE::juce_Realloc (location, numBytes)
/** This should be used instead of calling free directly. */ /** This should be used instead of calling free directly. */
#define juce_free(location) juce::juce_Free (location)
#define juce_free(location) JUCE_NAMESPACE::juce_Free (location)
#define juce_UseDebuggingNewOperator \ #define juce_UseDebuggingNewOperator \
static void* operator new (size_t sz) { void* const p = juce_malloc ((int) sz); return (p != 0) ? p : ::operator new (sz); } \ static void* operator new (size_t sz) { void* const p = juce_malloc ((int) sz); return (p != 0) ? p : ::operator new (sz); } \


+ 2
- 0
src/juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp View File

@@ -66,6 +66,8 @@ namespace zlibNamespace
#include "zlib/trees.c" #include "zlib/trees.c"
#include "zlib/uncompr.c" #include "zlib/uncompr.c"
#include "zlib/zutil.c" #include "zlib/zutil.c"
#undef Byte
#undef Bytef
} }
} }


+ 18
- 0
src/juce_core/threads/juce_ReadWriteLock.cpp View File

@@ -144,6 +144,24 @@ void ReadWriteLock::enterWrite() const throw()
} }
} }
bool ReadWriteLock::tryEnterWrite() const throw()
{
const int threadId = Thread::getCurrentThreadId();
const ScopedLock sl (accessLock);
if (readerThreads.size() + numWriters == 0
|| threadId == writerThreadId
|| (readerThreads.size() == 2
&& readerThreads.getUnchecked(0) == threadId))
{
writerThreadId = threadId;
++numWriters;
return true;
}
return false;
}
void ReadWriteLock::exitWrite() const throw() void ReadWriteLock::exitWrite() const throw()
{ {
const ScopedLock sl (accessLock); const ScopedLock sl (accessLock);


+ 9
- 0
src/juce_core/threads/juce_ReadWriteLock.h View File

@@ -105,6 +105,15 @@ public:
*/ */
void enterWrite() const throw(); void enterWrite() const throw();
/** Tries to lock this object for writing.
This is like enterWrite(), but doesn't block - it returns true if it manages
to obtain the lock.
@see enterWrite
*/
bool tryEnterWrite() const throw();
/** Releases the write-lock. /** Releases the write-lock.
If the caller thread hasn't got the lock, this can have unpredictable results. If the caller thread hasn't got the lock, this can have unpredictable results.


Loading…
Cancel
Save