public Var(PPVar var) { ppvar = var; isManaged = true; if (NeedsRefcounting(ppvar)) { PPBVar.AddRef(ppvar); } }
public Var(Var other) { ppvar = other.ppvar; isManaged = true; if (NeedsRefcounting(ppvar)) { PPBVar.AddRef(ppvar); } }
public PPResource AsResource() { if (!IsResource) { return(PPResource.Empty); } return(PPBVar.VarToResource(ppvar)); }
public string AsString() { if (!IsString) { return(string.Empty); } uint len = 0; return(PPBVar.VarToUtf8(ppvar, out len)); }
public Var(object var) { if (var is int) { ppvar.type = PPVarType.Int32; ppvar.value.as_int = (int)var; isManaged = true; } if (var is uint) { ppvar.type = PPVarType.Int32; ppvar.value.as_int = Convert.ToInt32(var); isManaged = true; } else if (var is string) { ppvar = VarFromUtf8Helper((string)var); isManaged = true; } else if (var is bool) { ppvar.type = PPVarType.Bool; ppvar.value.as_bool = (bool)var ? PPBool.True : PPBool.False; isManaged = true; } else if (var is double) { ppvar.type = PPVarType.Double; ppvar.value.as_double = (double)var; isManaged = true; } // Note: You may see precision differences else if (var is float) { ppvar.type = PPVarType.Double; ppvar.value.as_double = Convert.ToDouble((float)var); isManaged = true; } else if (var is Var) { ppvar = ((Var)var).ppvar; isManaged = true; if (NeedsRefcounting(ppvar)) { PPBVar.AddRef(ppvar); } } else { ppvar.type = PPVarType.Undefined; isManaged = true; } }
// This helper function uses the latest available version of VarFromUtf8. Note // that version 1.0 of this method has a different API to later versions. public static PPVar VarFromUtf8Helper(string utf8_str) { if (string.IsNullOrEmpty(utf8_str)) { return(PPBVar.VarUtf8Empty()); } else { var bytes = Encoding.UTF8.GetBytes(utf8_str); return(PPBVar.VarFromUtf8(bytes, (uint)bytes.Length)); } }
/// <summary> /// Method that will release all the PPResource's that have been placed on the queue to be released. /// </summary> /// <param name="result"></param> void ReleasePump(PPError result) { if (!resourceReleaseQueue.IsEmpty) { object resourceToBeReleased; while (resourceReleaseQueue.TryDequeue(out resourceToBeReleased)) { if (resourceToBeReleased is PPResource) { PPBCore.ReleaseResource((PPResource)resourceToBeReleased); } else if (resourceToBeReleased is PPVar) { PPBVar.Release((PPVar)resourceToBeReleased); } } } PPBCore.CallOnMainThread(releaseLoopTime, new CompletionCallback(ReleasePump), releaseLoopTime); }